#ifndef GRAFICOINTEL_H_INCLUDED
#define GRAFICOINTEL_H_INCLUDED

#include <algorithm>

#include <gtkmm/drawingarea.h>
#include <cairomm/context.h>
#include <gtkmm/label.h>
#include "ListaBloqueante.h"
#include <iostream>
#include <sstream>

#include "Byte_Tiempo.h"
class GraficoIntel : public Gtk::DrawingArea{
    public:
    GraficoIntel():TamMax(10),ESCALA_TIEMPO_PIXEL(0)
                ,ESCALA_BYTE_PIXEL(0),offset_x(0){}
    ~GraficoIntel(){}

    //le tienen que pasar los datos desde afuera
    void AgregarDataDeBytesEnFuncDelTiempo(const Byte_Tiempo& BT)
    {
        //std::cout << "agregando Byte_Tiempo" << std::endl;
        this->CantBytesPorUdeT.push_back( BT );
        if ( this->CantBytesPorUdeT.size() > this->TamMax )
        {
            //std::cout << "popeando Byte_Tiempo" << std::endl;
            this->CantBytesPorUdeT.pop_front();
            this->offset_x = (this->CantBytesPorUdeT.front()).Time;
        }
    }
    bool dibujar()
    {
        // force our program to redraw the entire clock.
        Glib::RefPtr<Gdk::Window> win = get_window();
        if (win)
        {
            Gdk::Rectangle r(0, 0, get_allocation().get_width(),
                    get_allocation().get_height());
            win->invalidate_rect(r, false);
        }
        return true;
    }
    private:
    unsigned int TamMax;
    float ESCALA_TIEMPO_PIXEL ;
    float ESCALA_BYTE_PIXEL ;
    int height;
    int width;
    int offset_x;

    ListaBloqueante<Byte_Tiempo> CantBytesPorUdeT;

    void DrawTextOnPointOfGraph(Cairo::RefPtr<Cairo::Context> cr
                                          ,Glib::RefPtr<Pango::Layout> pangoLayout
                                          ,const Byte_Tiempo& BT);
    void setearEscala();

    protected:
    //Override default signal handler:
    virtual bool on_expose_event(GdkEventExpose* event);
};
#endif // GRAFICOINTEL_H_INCLUDED
